GreaterEqual ================= 逐元素比较两个输入张量,判断 `input1` 的元素是否大于等于 `input2` 的对应元素。支持广播。 .. math:: \text{output}_i = (\text{input1}_i >= \text{input2}_i) 输出一个布尔张量,如果比较结果为真,则对应元素为 `true`,否则为 `false`。 输入: - **input1** - 第一个输入张量的数据地址。 - **input2** - 第二个输入张量的数据地址。 - **params** - 参数打包数组,格式如下: - **input0_dims** - 第一个输入张量 `input1` 的维度。 - **input1_dims** - 第二个输入张量 `input2` 的维度。 - **output_dims** - 输出张量的维度。 - **strides0** - 第一个输入张量 `input1` 的步长。 - **strides1** - 第二个输入张量 `input2` 的步长。 - **strides_output** - 输出张量的步长。 - **num_dims** - 维度数量。用于广播判断。 - **core_mask** - 核掩码。 输出: - **output** - 写入比较结果的布尔张量。 支持平台: ``FT78NE`` ``MT7004`` .. note:: - FT78NE 支持fp32, fp64, int8, int16, int32 - MT7004 支持fp16, fp32, int16, int32 **共享存储版本:** .. c:function:: void fp_greater_equal_s(float *input1, float* input2, bool *output, long long *params, int core_mask) .. c:function:: void hp_greater_equal_s(half *input1, half *input2, bool *output, long long *params, int core_mask) .. c:function:: void dp_greater_equal_s(double *input1, double *input2, bool *output, long long *params, int core_mask) .. c:function:: void i32_greater_equal_s(int32_t *input1, int32_t *input2, bool *output, long long *params, int core_mask) .. c:function:: void i16_greater_equal_s(int16_t *input1, int16_t *input2, bool *output, long long *params, int core_mask) .. c:function:: void i8_greater_equal_s(int8_t *input1, int8_t *input2, bool *output, long long *params, int core_mask) **C调用示例:** .. code-block:: c :linenos: :emphasize-lines: 50 //FT78NE示例 #include #include int main(int argc, char* argv[]) { float *input0 = (float *)0x81000000; float *input1 = (float *)0x82000000; bool *output = (bool *)0x83000000; int *strides0 = (int*)0x85000000; int *strides1 = (int*)0x86000000; int *strides_output = (int*)0x87000000; int i = 0; srand(seed++); float f_min = -100.0; float f_max = 100.0; // same shape int input0_dims[] = {64, 16, 63}; // 2x2 int input1_dims[] = {1, 1, 1}; // 2x2 int output_dims[] = {64, 16, 63}; // 2x2 int num_dims = 3; unsigned long long params[9]; params[0] = (unsigned long long)input0_dims; params[1] = (unsigned long long)input1_dims; params[2] = (unsigned long long)output_dims; params[3] = (unsigned long long)strides0; params[4] = (unsigned long long)strides1; params[5] = (unsigned long long)strides_output; params[6] = (unsigned long long)num_dims; int total_input0 = get_total_elements(num_dims, input0_dims); int total_input1 = get_total_elements(num_dims, input1_dims); int total_output = get_total_elements(num_dims, output_dims); int core_id = get_core_id(); int logic_core_id = GetLogicCoreId(core_mask, core_id); int core_num = GetCoreNum(core_mask); for(i = 0;i < total_input0;++i) { input0[i] = f_min + ((float)rand() / (float)RAND_MAX) * (f_max - f_min); } for(i = 0;i < total_input1;++i) { input1[i] = f_min + ((float)rand() / (float)RAND_MAX) * (f_max - f_min); } fp_greater_equal_s(input0, input1, output, params, core_mask);//调用汇编 return 0; } **私有存储版本:** .. c:function:: void fp_greater_equal_p(float *input1, float *input2, bool *output, long long *params) .. c:function:: void hp_greater_equal_p(half *input1, half *input2, bool *output, long long *params) .. c:function:: void dp_greater_equal_p(double *input1, double *input2, bool *output, long long *params) .. c:function:: void i32_greater_equal_p(int32_t *input1, int32_t *input2, bool *output, long long *params) .. c:function:: void i16_greater_equal_p(int16_t *input1, int16_t *input2, bool *output, long long *params) .. c:function:: void i8_greater_equal_p(int8_t *input1, int8_t *input2, bool *output, long long *params) **C调用示例:** .. code-block:: c :linenos: :emphasize-lines: 47 //FT04示例 #include #include int main(int argc, char* argv[]) { float *input0 = (float *)0x10010000; float *input1 = (float *)0x10020000; bool *output = (bool *)0x10030000; int *strides0 = (int*)0x10050000; int *strides1 = (int*)0x10060000; int *strides_output = (int*)0x10070000; int i = 0; srand(seed++); float f_min = -100.0; float f_max = 100.0; // same shape int input0_dims[] = {4, 8, 17}; // 2x2 int input1_dims[] = {1, 1, 1}; // 2x2 int output_dims[] = {4, 8, 17}; // 2x2 int num_dims = 3; unsigned long long params[9]; params[0] = (unsigned long long)input0_dims; params[1] = (unsigned long long)input1_dims; params[2] = (unsigned long long)output_dims; params[3] = (unsigned long long)strides0; params[4] = (unsigned long long)strides1; params[5] = (unsigned long long)strides_output; params[6] = (unsigned long long)num_dims; int total_input0 = get_total_elements(num_dims, input0_dims); int total_input1 = get_total_elements(num_dims, input1_dims); int total_output = get_total_elements(num_dims, output_dims); for(i = 0;i < total_input0;++i) { input0[i] = f_min + ((float)rand() / (float)RAND_MAX) * (f_max - f_min); } for(i = 0;i < total_input1;++i) { input1[i] = f_min + ((float)rand() / (float)RAND_MAX) * (f_max - f_min); } fp_greater_equal_p(input0, input1, output, params);//调用汇编 return 0; }